2.2 匹配任意字符

上一节见到的正则表达式都是静态文本,它们根本体现不出正则表达式的威力。下面我们一起来看看如何使用正则表达式去匹配不可预知的字符。

在正则表达式时,特殊字符用来匹配一系列字符集合。 . 字符(英文句号/小数点)可以匹配任何一个单个的字符。

提示

如果你曾经使用过 DOS 的文件搜索功能,你将发现正则表达式里面的 . 字符相当于 DOS 里面的 ? 字符。SQL 用户将注意到 . 字符相当于 SQL 中的 * 字符。

于是,用正则表达式 c.t 进行搜索将匹配到 catcot (或其他任何 c 和 t 中间包含一个字符的单词)

例 1

分析

这个例子比上一个多了一个“sales.xls”文件。
因为“.”能够匹配任何一个单个字符,所以“正则表达式.md”和“正则表达式.txt”也与模式"正则表达式."相匹配。

在同一个正则表达式里面允许使用多个 . 字符,它们既可以连续出现也可以间隔着出现在模式的不同位置。

例 3

我们再来看一个使用了相同原始文本的例子:把以 na 或 sa 开关的文件找出来。

分析

正则表达式“.a.”把“na1”、“na2”和“sa1”找了出来,但它们同时还找到了 4 个预料之外的匹配结果。

为什么会这样呢?因为我们使用的模式将与第 2 个字符是 a 的任意 3 个字符相匹配。我们真正需要的是后面再紧跟着一个英文句号的".a."的模式。

例 4

我们再来试一次:

分析

.a.. 并不比 .a. 也多少;新增加的 . 将匹配任何一个多出来的字符。

既然 . 是一个能够匹配任何一个单个字符的特殊字符,我们怎样才能搜索 . 本身呢?下节说

发表评论